package api

import (
	"context"
	"net/http"
	"time"

	"gitee.com/liumou_site/go-network-monitoring/service"
	"gitee.com/liumou_site/go-network-monitoring/utils"
	"github.com/gin-gonic/gin"
)

// NetworkAPIHandler 网络监控API处理器
type NetworkAPIHandler struct {
	networkService *service.NetworkService
}

// NewNetworkAPIHandler 创建网络监控API处理器实例
func NewNetworkAPIHandler() *NetworkAPIHandler {
	return &NetworkAPIHandler{
		networkService: service.NewNetworkService(),
	}
}

// GetNetworkDataAPI 获取网络数据API
// GET /api/network
// 返回JSON格式的所有网络接口统计数据
func (h *NetworkAPIHandler) GetNetworkDataAPI(c *gin.Context) {
	// 获取所有网络接口的统计数据
	allStats, err := h.networkService.GetNetworkStats()
	if err != nil {
		c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
		return
	}

	// 计算所有网络接口的速度
	speedStats, _, err := h.networkService.CalculateSpeed(context.Background(), 1*time.Second)
	if err != nil {
		c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
		return
	}

	// 构建响应数据
	response := h.networkService.BuildNetworkAPIResponse(allStats, speedStats)
	c.JSON(http.StatusOK, response)
}

// GetSpeedDataAPI 获取网速数据API
// GET /speed
// 返回所有网卡的实时速度数据
func (h *NetworkAPIHandler) GetSpeedDataAPI(c *gin.Context) {
	// 获取所有网络接口的统计数据
	allStats, err := h.networkService.GetNetworkStats()
	if err != nil {
		c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
		return
	}

	// 计算所有网络接口的速度
	speedStats, _, err := h.networkService.CalculateSpeed(context.Background(), 1*time.Second)
	if err != nil {
		c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
		return
	}

	// 构建速度数据响应
	speedData := h.networkService.BuildSpeedAPIResponse(allStats, speedStats)
	c.JSON(http.StatusOK, speedData)
}

// GetInterfaceListAPI 获取网卡列表API
// GET /api/interfaces
// 返回所有网卡的基本信息列表和统计信息
func (h *NetworkAPIHandler) GetInterfaceListAPI() gin.HandlerFunc {
	return func(c *gin.Context) {
		interfaces, err := h.networkService.GetInterfaceList()
		if err != nil {
			c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
			return
		}

		// 为每个接口生成ID
		for i := range interfaces {
			interfaces[i].ID = utils.GenerateInterfaceID(interfaces[i].Name)
		}

		// 构建响应
		response := h.networkService.BuildInterfaceListResponse(interfaces)
		c.JSON(http.StatusOK, response)
	}
}
